이펙티브 자바 [이펙티브 자바] 클래스와 인터페이스 Item15 - 클래스와 멤버의 접근 권한을 최소화하라 클래스와 멤버의 접근 권한을 최소화하라. 그 중 하나가 접근 제어 메커니즘이다. 이는 클래스, 인터페이스, 멤버의 접근 허용 범위(접근성)를 제어하는 것이다. 이때 접근성은 접근 제한자로 명시될 수 있다. 클래스나 인터페이스, 멤버등의 접근 권한을 명시한다. private - 멤버를 선언한 톱레벨 클래스에서만 접근 가능. package-private - 해당 패키지 안의 모든 클래스에서 접근... 공부Effective Java스터디이펙티브 자바JavaEffective Java [ ITEM 22 ] 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할 클래스가 어떤 인터페이스를 구현 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것 인터페이스는 이 용도로만 사용해야 한다! 상수 인터페이스 상수 인터페이스 메서드 없이, 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스 정규화된 이름을 쓰는 걸 피하고자 인터페이스를 구현하곤 한다. 상수 ... Effective Java이펙티브 자바Effective Java [이펙티브 자바] 클래스와 인터페이스 Item16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 자바에서는 추상화의 기본 단위로 클래스(Class)와 인터페이스(Interface) 를 정의하고 있고, 이는 곧 자바의 심장과도 같다. 다른 컴포넌트에서 해당 클래스 데이터 필드에 직접 접근이 가능하다. 그 말은, 캡슐화(Encapsulation)가 전혀 안되기 때문에 그에 따른 장점도 얻을 수 없다는 말이다. API를 수정하지 않고는 내부 표현을 바꿀 수 없다. 불변식을 보장할 수 없다. ... 자바공부Effective Java스터디이펙티브 자바JavaEffective Java [이펙티브 자바] 클래스와 인터페이스 Item17 - 변경 가능성을 최소화하라 일반적으로 불변 클래스는 가변 클래스에 비해 설계하고 구현하고 사용하기가 쉽고, 그 외에, 인스턴스의 값을 변경할 수 있는 로직이 들어가는 메서드는 안된다. 클래스를 확장할 수 없도록 한다. 기술적으로 기본 타입 필드나 불변 객체를 참조하는 필드를 public final로만 선언해도 불변은 된다. 코드에서 사칙연산 부분을 보면, 인스턴스 본인의 필드 값을 바꾸지 않고 결과만 리턴하는 것을 볼... 자바공부Effective Java스터디이펙티브 자바JavaEffective Java 이펙티브 자바 아이템6 정리 String 인스턴스 아래 코드는 실행 될 때 마다 String 인스턴스를 새로 만든다. 아래 코드는 새로운 인스턴스를 만들지만 하나의 String 인스턴스를 사용한다. 이 방법은 문자열 리터럴 생성 방식으로 String Contstant Pool이란 영역에 저장된다. String.maches()의 성능 이슈 아래 코드는 String.marches의 내부 코드다. 코드를 보면 matches를... Effective Java이펙티브 자바Effective Java 아이템1: 생성자 대신 정적 팩터리 메서드를 고려하라 해당 클래스의 인스턴스를 반환하는 단순한 정적 메서드 정적 팩터리 메서드가 생성자보다 좋은 점 이름을 가질 수 있다 정적 팩터리 메서드 BigInteger.probablePrime이 더 직관적이다. 반면, 정적 팩터리 메서드는 하나의 시그니처로 하나의 생성자만 가질 수 있는 제약을 받지 않는다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 인터페이스 기반 프레임워크: 인터페이... 이펙티브 자바이펙티브 자바 [이펙티브 자바] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식은 보통 두 가지다. 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마... 생성자열거 타입싱글턴이펙티브 자바Effective Java자바Enumprivate 생성자나 열거 타입으로 싱글턴임을 보증하라Singletonprivate 생성자Effective Java [이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 이펙티브 자바를 읽고 정리한 글입니다. 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이지만, 정적 메서드와 정적 필드만을 담은 클래스를 만들 때가 있다. java.lang.Math, java.util.Arrays 등 final 클래스와 관련한 메서드들을 모아놓을 때도 사용 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다. 하지만 생성자를 명시하지 않으... 인스턴스화를 막으려거든 private 생성자를 사용하라Effective Java자바private 생성자인스턴스이펙티브 자바인스턴스화Effective Java [이펙티브 자바] 아이템 9. try-finally보다는 try-with-resources를 사용하라 자바 라이브러리에는 InputStream, OutputStream, java.sql.Connection 등 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. 예외는 try 블록과 finally 블록 모두에서 발생할 ... try-finally보다는 try-with-resources를 사용하라try-with-resourcesEffective Javatry-finally자바이펙티브 자바Effective Java
[이펙티브 자바] 클래스와 인터페이스 Item15 - 클래스와 멤버의 접근 권한을 최소화하라 클래스와 멤버의 접근 권한을 최소화하라. 그 중 하나가 접근 제어 메커니즘이다. 이는 클래스, 인터페이스, 멤버의 접근 허용 범위(접근성)를 제어하는 것이다. 이때 접근성은 접근 제한자로 명시될 수 있다. 클래스나 인터페이스, 멤버등의 접근 권한을 명시한다. private - 멤버를 선언한 톱레벨 클래스에서만 접근 가능. package-private - 해당 패키지 안의 모든 클래스에서 접근... 공부Effective Java스터디이펙티브 자바JavaEffective Java [ ITEM 22 ] 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할 클래스가 어떤 인터페이스를 구현 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것 인터페이스는 이 용도로만 사용해야 한다! 상수 인터페이스 상수 인터페이스 메서드 없이, 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스 정규화된 이름을 쓰는 걸 피하고자 인터페이스를 구현하곤 한다. 상수 ... Effective Java이펙티브 자바Effective Java [이펙티브 자바] 클래스와 인터페이스 Item16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 자바에서는 추상화의 기본 단위로 클래스(Class)와 인터페이스(Interface) 를 정의하고 있고, 이는 곧 자바의 심장과도 같다. 다른 컴포넌트에서 해당 클래스 데이터 필드에 직접 접근이 가능하다. 그 말은, 캡슐화(Encapsulation)가 전혀 안되기 때문에 그에 따른 장점도 얻을 수 없다는 말이다. API를 수정하지 않고는 내부 표현을 바꿀 수 없다. 불변식을 보장할 수 없다. ... 자바공부Effective Java스터디이펙티브 자바JavaEffective Java [이펙티브 자바] 클래스와 인터페이스 Item17 - 변경 가능성을 최소화하라 일반적으로 불변 클래스는 가변 클래스에 비해 설계하고 구현하고 사용하기가 쉽고, 그 외에, 인스턴스의 값을 변경할 수 있는 로직이 들어가는 메서드는 안된다. 클래스를 확장할 수 없도록 한다. 기술적으로 기본 타입 필드나 불변 객체를 참조하는 필드를 public final로만 선언해도 불변은 된다. 코드에서 사칙연산 부분을 보면, 인스턴스 본인의 필드 값을 바꾸지 않고 결과만 리턴하는 것을 볼... 자바공부Effective Java스터디이펙티브 자바JavaEffective Java 이펙티브 자바 아이템6 정리 String 인스턴스 아래 코드는 실행 될 때 마다 String 인스턴스를 새로 만든다. 아래 코드는 새로운 인스턴스를 만들지만 하나의 String 인스턴스를 사용한다. 이 방법은 문자열 리터럴 생성 방식으로 String Contstant Pool이란 영역에 저장된다. String.maches()의 성능 이슈 아래 코드는 String.marches의 내부 코드다. 코드를 보면 matches를... Effective Java이펙티브 자바Effective Java 아이템1: 생성자 대신 정적 팩터리 메서드를 고려하라 해당 클래스의 인스턴스를 반환하는 단순한 정적 메서드 정적 팩터리 메서드가 생성자보다 좋은 점 이름을 가질 수 있다 정적 팩터리 메서드 BigInteger.probablePrime이 더 직관적이다. 반면, 정적 팩터리 메서드는 하나의 시그니처로 하나의 생성자만 가질 수 있는 제약을 받지 않는다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 인터페이스 기반 프레임워크: 인터페이... 이펙티브 자바이펙티브 자바 [이펙티브 자바] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식은 보통 두 가지다. 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마... 생성자열거 타입싱글턴이펙티브 자바Effective Java자바Enumprivate 생성자나 열거 타입으로 싱글턴임을 보증하라Singletonprivate 생성자Effective Java [이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 이펙티브 자바를 읽고 정리한 글입니다. 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이지만, 정적 메서드와 정적 필드만을 담은 클래스를 만들 때가 있다. java.lang.Math, java.util.Arrays 등 final 클래스와 관련한 메서드들을 모아놓을 때도 사용 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다. 하지만 생성자를 명시하지 않으... 인스턴스화를 막으려거든 private 생성자를 사용하라Effective Java자바private 생성자인스턴스이펙티브 자바인스턴스화Effective Java [이펙티브 자바] 아이템 9. try-finally보다는 try-with-resources를 사용하라 자바 라이브러리에는 InputStream, OutputStream, java.sql.Connection 등 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많다. 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. 예외는 try 블록과 finally 블록 모두에서 발생할 ... try-finally보다는 try-with-resources를 사용하라try-with-resourcesEffective Javatry-finally자바이펙티브 자바Effective Java